package javase.javase01.exercise08;

import java.io.*;
import java.util.ArrayList;

/**
 * @author: Gan
 * @date 2021/4/20 0020 20:48
 * @description: 要求: 从0-9这10个数中
 * - 生成一个长度是3的随机数字，把这个字符串当作密码
 * - 创建一个破解线程，使用穷举法，匹配这个密码,直到匹配到正确的
 * - 创建一个日志线程，将用过的字符串写入文件，这个日志线程设计为守护线程
 * 提示： 破解线程把穷举法生成的可能密码放在一个容器中，日志线程把这个容器中的密码并打印出来。(因为没有学集合,先用数组)
 * 注意:  守护线程的特征,jvm中只有用户线程 jvm退出
 **/
public class Day019Work3 {
    public static void main(String[] args) throws FileNotFoundException, InterruptedException {
        //生成一个长度是3的随机数字
        int password = (int) (Math.random() * 1000);
        //System.out.println(password);
        FileOutputStream out = new FileOutputStream("a.txt");

        ArrayList<Integer> arrayList = new ArrayList<>();
        //破解线程
        Thread breakThread = new Thread(() -> {
            while (true) {
               int  num = (int) (Math.random() * 1000);
                arrayList.add(num);
                if (num == password) {
                    //System.out.println(num);
                    break;
                }
            }
        });
        Thread logThread = new Thread(() -> {
            int n;
            for (int i = 0; i < arrayList.size(); i++) {
                n = arrayList.get(i);
                if (n == password){
                    try {
                        String str = "匹配成功：";
                        String str2 = String.valueOf(password);
                        out.write((str+str2).getBytes());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }finally {
                        try {
                            out.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
        logThread.setDaemon(true);
        breakThread.start();
        logThread.start();
        Thread.sleep(1000);
    }
}
